﻿using System.Data;
using Gencode.Common.SQL;

namespace Gencode.PrsCommon.Data.Abteilung
{
	public class AbteilungData
	{
		/// <summary>
		/// Creates a DataView with all Abteilungen. [abteilungid,name,einsatzprotag]
		/// </summary>
		/// <param name="mandid">mandid</param>
		/// <returns>abteilungid,name,einsatzprotag</returns>
		public static DataView GetAbteilungen(string mandid)
		{
			return GetAbteilungen(mandid, 0);
		}

		/// <summary>
		/// Creates a DataView with all Abteilungen. [abteilungid,name,einsatzprotag]
		/// </summary>
		/// <param name="mandid">mandid</param>
		/// <returns>abteilungid,name,einsatzprotag</returns>
		public static DataView GetAbteilungen(string mandid, int abteilungid)
		{
			Querry query = new Querry();
			query.SetSTPName("get_abteilungen");
			query.AddParameter("@mandid", mandid);
			query.AddParameter("@abteilungid", abteilungid);
			return query.ExecuteForDataView();
		}

        /// <summary>
        /// Creates a DataView with all Abteilungen. [abteilungid,name,einsatzprotag]
        /// </summary>
        /// <param name="mandid">mandid</param>
        /// <param name="addEmptyRow">add empty row at top?</param>
        /// <returns>abteilungid,name,einsatzprotag</returns>
        public static DataView GetAbteilungen(string mandid, bool addEmptyRow)
        {
            DataView dv = GetAbteilungen(mandid, 0);

            if (addEmptyRow)
            {
                DataRow row = dv.Table.NewRow();
                dv.Table.Rows.InsertAt(row, 0);
            }

            return dv;
        }

		/// <summary>
		/// [abteilungid,name,einsatzprotag]
		/// </summary>
		/// <param name="abteilungid">abeteilungid</param>
		/// <returns>abteilungid,name,einsatzprotag</returns>
		public static DataView GetAbteilung(int abteilungid)
		{
			return GetAbteilungen("", abteilungid);
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="abteilungid"></param>
		/// <returns></returns>
		public static string GetBeschreibungLangtext(int abteilungid)
		{
			var dv = SimpleQuerry.ExecuteForDataView("select Name from Abteilung a inner join Beschreibung b on b.BeschrID = a.BeschrID where a.AbteilungID = " + abteilungid);

			if (dv != null && dv.Count > 0)
				return dv[0].Row[0].ToString();

			return string.Empty;
		}

		public static bool CheckIfAbteilungIsUsed(int abteilungid)
		{
			var dv = SimpleQuerry.ExecuteForDataView("select AbteilungID from ArbeitsPlan ap inner join PlanSchema s on s.SchemaID = ap.SchemaID where AbteilungID = " + abteilungid + " group by AbteilungID");
			if (dv.Count > 0)
				return true;

			return false;
		}

		public static void DeleteAbteilung(int abteilungid)
		{
			if (!CheckIfAbteilungIsUsed(abteilungid))
			{
				var stp = new Querry("del_abteilung");
				stp.AddParameter("@abteilungid", abteilungid);

				stp.Execute(true);
			}
		}

		public static void UpdateAbteilung(int abteilungid, string name, string beschreibung, double stundenprotag)
		{
			var stp = new Querry("upd_abteilung");

			stp.AddParameter("@abteilungid", abteilungid);
			stp.AddParameter("@abteilungname", name);
			stp.AddParameter("@beschreibung", beschreibung);
			stp.AddParameter("@stundenprotag", stundenprotag);

			stp.Execute(true);
		}

		public static void SaveNewAbteilung(string name, string beschreibung, double stundenprotag, string mandid)
		{
			var stp = new Querry("set_abteilung");

			stp.AddParameter("@abteilungname", name);
			stp.AddParameter("@kurztext", name);
			stp.AddParameter("@beschreibung", beschreibung);
			stp.AddParameter("@stundenprotag", stundenprotag);
			stp.AddParameter("@mandid", mandid);

			stp.Execute(true);
		}

		/// <summary>
		/// [AbteilungID, Name, Prozent]
		/// </summary>
		/// <param name="mandid"></param>
		/// <param name="prsid"></param>
		/// <param name="addEmptyRow"></param>
		/// <param name="assigned"></param>
		/// <returns></returns>
        public static DataView GetAbteilungPerson(string mandid, int prsid, bool addEmptyRow, bool assigned)
		{
			DataView dv;

			if(assigned)
				dv = SimpleQuerry.ExecuteForDataView("select p.AbteilungID,a.Name, p.Prozent from PersonalAbteilung p,Abteilung a where p.AbteilungID = a.AbteilungID and p.PrsId = " + prsid + " and isnull(p.Status,1) = 1");
			else
				dv = SimpleQuerry.ExecuteForDataView("select AbteilungID, Name, 0 from Abteilung where mandid = '" + mandid + "' and AbteilungID not in (select AbteilungID from PersonalAbteilung where PrsId = " + prsid + " and isnull(Status,1) = 1)");

			if (addEmptyRow)
			{
				DataRow row = dv.Table.NewRow();
				dv.Table.Rows.InsertAt(row, 0);
			}

			return dv;
		}

		public static DataView GetAbteilungNamen(string mandid)
		{
			DataView dv = SimpleQuerry.ExecuteForDataView("select Name,AbteilungID from Abteilung where mandid = '" + mandid + "' order by AbteilungID");

			if (dv != null)
				return dv;

			return new DataView();
		}
	}
}
